﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.Documentos.Entities;
using HerGoS.ControlsUI;
using HerGoS.Documentos.Engine;
using HerGoS.Administration.Engine;
using System.Web.Services;
using HerGoS.Administration.Entities;
using HerGoS.WebControlExtend;

namespace HerGoS.WebUI.Documentos.Movimiento
{
    public partial class ListadoMovimientosPorTipo : PageBase
    {

        [WebMethod]
        public static List<Usuario> GetUsuariosByArea(int areaId)
        {
            List<Usuario> ListUsuarios;
            ListUsuarios = GestorUsuario.ObtenerUsuariosPorArea(areaId);
            return ListUsuarios;

        }

        #region Propiedades
        public List<LegajoDocumentoPorTipoMovDTO> LegajosDocumentosPorTipoMov
        {
            get
            {
                if (ViewState["LegajoDocumentoPorTipoMov"] != null)
                    return (List<LegajoDocumentoPorTipoMovDTO>)ViewState["LegajoDocumentoPorTipoMov"];
                return null;
            }
            set
            {
                ViewState["LegajoDocumentoPorTipoMov"] = value;
            }

        }

      

        public int Id
        {
            get
            {
                if (ViewState["id"] != null)
                    return (int)ViewState["id"];
                return 0;
            }
            set
            {
                ViewState["id"] = value;
            }

        }

        public int TipoDoc
        {
            get
            {
                if (ViewState["TipoDoc"] != null)
                    return (int)ViewState["TipoDoc"];
                return 0;
            }
            set
            {
                ViewState["TipoDoc"] = value;
            }

        }

        #endregion



        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Id = Convert.ToInt32(Request.QueryString["Id"]);
                TipoDoc = Convert.ToInt32(Request.QueryString["TipoDoc"]);
                lblTitulo.Text = string.Format("Documentos en {0}", Convert.ToString(Request.QueryString["tipomov"]));
                LoadCombos();
                Initialize();
                LoadGridMovimientoPorTipo(false);

            }


        }

        void Initialize()
        {
            this.GridMovimientoPorTipo.Settings(new GridViewExtBasic());
            this.btnGuardar.Settings(new ButtonExtText());
            this.btnFiltrar.Settings(new ButtonExtText());
            this.bntQuitarFiltros.Settings(new ButtonExtText());
          

        }

        private void LoadCombos()
        {
            cboTipoMovimiento.DataSource = GestorTipoMovimiento.Consultar();
            cboTipoMovimiento.DataTextField = "Descripcion";
            cboTipoMovimiento.DataValueField = "OID";
            cboTipoMovimiento.DataBind();
            cboTipoMovimiento.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            cboArea.DataSource = GestorArea.Consultar();
            cboArea.DataTextField = "Descripcion";
            cboArea.DataValueField = "OID";
            cboArea.DataBind();
            cboArea.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            cboEntidad.DataSource = GestorEntidades.Consultar();
            cboEntidad.DataTextField = "Denominacion";
            cboEntidad.DataValueField = "OID";
            cboEntidad.DataBind();
            cboEntidad.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));


            cboTipoAccion.DataSource = GestorTipoAccion.Consultar();
            cboTipoAccion.DataTextField = "Descripcion";
            cboTipoAccion.DataValueField = "OID";
            cboTipoAccion.DataBind();
            cboTipoAccion.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            cboUsuario.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

        }

  
        private void LoadGridMovimientoPorTipo(bool cache)
        {
            if (!cache)
                this.LegajosDocumentosPorTipoMov = GestorMovimientos.ConsultarPorTipoMovimento(Id, TipoDoc);//ID PROPERTY
            this.GridMovimientoPorTipo.DataSource = LegajosDocumentosPorTipoMov;
            this.GridMovimientoPorTipo.DataBind();
        }

        protected void btnRefresh_Click(object sender, EventArgs e)
        {
            LoadGridMovimientoPorTipo(false);
        }

        protected void GridMovimientoPorTipo_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButtonExt Ver = e.Row.FindControl("btnVerMovimientos") as ImageButtonExt;
                if (Ver != null)
                {
                    Ver.Settings(new ImageButtonExtPopup());
                    Ver.ToolTip = "Ver Movimientos Legajo";
                    int oid = DataBinder.Eval(e.Row.DataItem, "OID").ToInteger();
                    string nroleg = DataBinder.Eval(e.Row.DataItem, "NroLegajo").ToString();
                    var res = nroleg.ToJson();
                    Ver.OnClientClick = "Ver(" + oid.ToString() + " , " + res.ToString() + "  ); return false;";
                }

             
            }
        }
        protected void GridMovimientoPorTipo_PageIndexChanging(Object sender, GridViewPageEventArgs e)
        {
            this.GridMovimientoPorTipo.PageIndex = e.NewPageIndex;
            LoadGridMovimientoPorTipo(true);
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            List<int> ListaCodigos = new List<int>();
            foreach (GridViewRow row in GridMovimientoPorTipo.Rows)
            {
                bool isChecked = ((CheckBox)GridMovimientoPorTipo.Rows[row.RowIndex].FindControl("chkSeleccion")).Checked;

                if (isChecked)
                {
                    int codigo = Convert.ToInt32(GridMovimientoPorTipo.DataKeys[row.RowIndex].Values["OID"]);
                    ListaCodigos.Add(codigo);
                }
            }
            if (ListaCodigos.Count == 0) 
            {
                string script = @"notify('Debe seleccionar un item de la Grilla', 'ERROR');";
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", script, true);
                return;
            }
            try
            {
                foreach (int cod in ListaCodigos)
                {
                    HerGoS.Documentos.Entities.Movimiento mov = new HerGoS.Documentos.Entities.Movimiento();
                    mov.LegajoDocumento = GestorLegajoDocumento.Obtener(cod);
                    mov.TipoMovimiento = new TipoMovimiento { OID = cboTipoMovimiento.SelectedValue.ToInteger() };
                    mov.EntidadDestino = new Entidad { OID = cboEntidad.SelectedValue.ToInteger() };
                    mov.AreaDestino = new Area { OID = cboArea.SelectedValue.ToInteger() };
                    mov.PersonaDestino = new Persona { OID = hidusuario.Value.ToInteger() };
                    mov.TipoAccion = new TipoAccion { OID = this.cboTipoAccion.SelectedValue.ToInteger() };
                    mov.Observaciones = this.txtObservacion.Text;

                    GestorMovimientos.Guardar(mov);
                }
                         

                LoadGridMovimientoPorTipo(false);
                string script = @"notify('el movimiento ha sido guardado', 'MESSAGE');";
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", script, true);
            }
            catch (Exception ex)
            { 
            
            }
        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            List<LegajoDocumentoPorTipoMovDTO> filtroResult = LegajosDocumentosPorTipoMov;

            if (!string.IsNullOrEmpty(this.txtReferencia.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.Referencia.ToLower().Contains(this.txtReferencia.Text.ToLower()));
            }

            if (!string.IsNullOrEmpty(this.txtDescripcion.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.Descripcion.ToLower().Contains(this.txtDescripcion.Text.ToLower()));
            
            }

            if (!string.IsNullOrEmpty(this.txtFechaDesde.Text) && string.IsNullOrEmpty(this.txtFechaHasta.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.FechaMov >= this.txtFechaDesde.Text.ToDateTime());
            }


            if (!string.IsNullOrEmpty(this.txtFechaHasta.Text) && string.IsNullOrEmpty(this.txtFechaDesde.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.FechaMov <= this.txtFechaHasta.Text.ToDateTime());
            }


            if (!string.IsNullOrEmpty(this.txtFechaDesde.Text) && !string.IsNullOrEmpty(this.txtFechaHasta.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.FechaMov >= this.txtFechaDesde.Text.ToDateTime() && y.FechaMov <= this.txtFechaHasta.Text.ToDateTime());

            }




            this.GridMovimientoPorTipo.DataSource = filtroResult;
            this.GridMovimientoPorTipo.DataBind();
        }
        protected void btnQuitarFiltros_Click(object sender, EventArgs e)
        {
            this.txtReferencia.Text = string.Empty;
            this.txtDescripcion.Text = string.Empty;
            this.txtFechaDesde.Text = string.Empty;
            this.txtFechaHasta.Text = string.Empty;
            LoadGridMovimientoPorTipo(true);

        }

    }
}